package com.zenithmind.classroom.pojo.domain;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 课程实体类
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("classroom_course")
@Schema(description = "课程实体")
public class Course extends BaseEntity {

    /**
     * 课程标题
     */
    @Schema(description = "课程标题")
    private String title;

    /**
     * 课程副标题
     */
    @Schema(description = "课程副标题")
    private String subtitle;

    /**
     * 课程描述
     */
    @Schema(description = "课程描述")
    private String description;

    /**
     * 课程封面图片URL
     */
    @Schema(description = "课程封面图片URL")
    private String coverImageUrl;

    /**
     * 讲师用户ID
     */
    @Schema(description = "讲师用户ID")
    private String instructorId;

    /**
     * 讲师姓名
     */
    @Schema(description = "讲师姓名")
    private String instructorName;

    /**
     * 讲师头像
     */
    @Schema(description = "讲师头像")
    private String instructorAvatar;

    /**
     * 课程分类ID
     */
    @Schema(description = "课程分类ID")
    private String categoryId;

    /**
     * 课程分类名称
     */
    @Schema(description = "课程分类名称")
    private String categoryName;

    /**
     * 课程价格（0表示免费）
     */
    @Schema(description = "课程价格（0表示免费）")
    private Double price;

    /**
     * 课程状态（0:草稿, 1:已发布, 2:已下架, 3:审核中）
     */
    @Schema(description = "课程状态（0:草稿, 1:已发布, 2:已下架, 3:审核中）")
    private Integer status;

    /**
     * 课程难度（1:入门, 2:初级, 3:中级, 4:高级, 5:专家）
     */
    @Schema(description = "课程难度（1:入门, 2:初级, 3:中级, 4:高级, 5:专家）")
    private Integer difficulty;

    /**
     * 课程类型（1:录播课程, 2:直播课程, 3:混合课程）
     */
    @Schema(description = "课程类型（1:录播课程, 2:直播课程, 3:混合课程）")
    private Integer type;

    /**
     * 课程标签（JSON格式）
     */
    @Schema(description = "课程标签（JSON格式）")
    private String tags;

    /**
     * 预计学习时长（小时）
     */
    @Schema(description = "预计学习时长（小时）")
    private Integer estimatedHours;

    /**
     * 章节数量
     */
    @Schema(description = "章节数量")
    private Integer chapterCount;

    /**
     * 课时数量
     */
    @Schema(description = "课时数量")
    private Integer lessonCount;

    /**
     * 学习人数
     */
    @Schema(description = "学习人数")
    private Long studentCount;

    /**
     * 完成人数
     */
    @Schema(description = "完成人数")
    private Long completedCount;

    /**
     * 课程评分
     */
    @Schema(description = "课程评分")
    private Double rating;

    /**
     * 评价数量
     */
    @Schema(description = "评价数量")
    private Long reviewCount;

    /**
     * 课程介绍视频URL
     */
    @Schema(description = "课程介绍视频URL")
    private String introVideoUrl;

    /**
     * 学习目标
     */
    @Schema(description = "学习目标")
    private String objectives;

    /**
     * 适合人群
     */
    @Schema(description = "适合人群")
    private String targetAudience;

    /**
     * 先修要求
     */
    @Schema(description = "先修要求")
    private String prerequisites;

    /**
     * 课程大纲（JSON格式）
     */
    @Schema(description = "课程大纲（JSON格式）")
    private String syllabus;

    /**
     * 是否推荐（0-否，1-是）
     */
    @Schema(description = "是否推荐（0-否，1-是）")
    private Integer isRecommend;

    /**
     * 是否热门（0-否，1-是）
     */
    @Schema(description = "是否热门（0-否，1-是）")
    private Integer isHot;

    /**
     * 是否新课程（0-否，1-是）
     */
    @Schema(description = "是否新课程（0-否，1-是）")
    private Integer isNew;

    /**
     * 是否免费（0-付费，1-免费）
     */
    @Schema(description = "是否免费（0-付费，1-免费）")
    private Integer isFree;

    /**
     * 是否置顶（0-否，1-是）
     */
    @Schema(description = "是否置顶（0-否，1-是）")
    private Integer isTop;

    /**
     * 发布时间
     */
    @Schema(description = "发布时间")
    private LocalDateTime publishTime;

    /**
     * 最后更新时间
     */
    @Schema(description = "最后更新时间")
    private LocalDateTime lastUpdateTime;

    /**
     * 课程有效期（天）
     */
    @Schema(description = "课程有效期（天）")
    private Integer validityDays;

    /**
     * 排序值
     */
    @Schema(description = "排序值")
    private Integer sortOrder;
}
